延迟脚本 defer

<script>标签定义了defer属性。这个属性的用途是表明脚本在执行时不会影响页面的构造。也就是说,脚本会被延迟到整个页面都解析完毕后再运行。因此,在<script>元素中设置defer属性,相当于告诉浏览器立即下载,但延迟执行。

<!doctype html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Example HTML Page</title>
</head>
<body>
  <script type="text/javascript" defer="defer" src="example1.js"></script>
</body>
</html>

在这个例子中,虽然我们把<script>元素放在了文档的<head>元素中,但其中包含的脚本将延迟到浏览器遇到</html<标签后再执行。

异步加载 async

<!doctype html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Example HTML Page</title>
</head>
<body>
  <script type="text/javascript" async src="example1.js"></script>
</body>
</html>

指定async属性的目的是不让页面等待两个脚本下载和执行,从而异步加载页面其他内容,为此,建议异步脚本不要在加载期间修改DOM。

异步脚本一定会再页面load事件前执行,但可能会再DOMContentLoaded事件触发之前或之后执行。

文档模式

最初的俩种文档模式是:混杂模式(quirks mode)和标准模式(standards mode)。混杂模式会让IE的行为与(包含非标准特性的)IE5相同,而标准模式则让IE的行为更接近标准行为。

如果在文档开始初没有发现文档类型声明,则所有浏览器都会默认开启混杂模式。


小渝人儿
1.1k 声望849 粉丝

前端工程师